/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package business;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.TableGenerator;
import javax.sql.DataSource;

/**
 *
 * @author Alberto
 */
@Entity
@Table(name = "alumno")
@NamedQueries({
    @NamedQuery(name = "Alumno.findByCorreouniversidad", query = "SELECT a FROM Alumno a WHERE a.correouniversidad = :correouniversidad")
    
})
public class Alumno implements Serializable {
    private static final long serialVersionUID = 1L;
    protected DataSource ds;
    private Integer idalumno;
    private String nombre;
    private String apellidos;
    private String telefono;
    private Empleado consejerocurricular;
    private String contactopariente;
    private String correouniversidad;
    private String contrasena;
    private List<Contratoalumno> contratoalumnos;
    private List<Reserva> reservas;
   

    public Alumno() {
        
    }

    public Alumno(Empleado consejero,String nombre, String apellidos, String telefono, String contactopariente, String correouniversidad, String contrasena) {
        this.consejerocurricular=consejero;
        this.nombre = nombre;
        this.apellidos = apellidos;
        this.telefono = telefono;
        this.consejerocurricular = new Empleado();
        this.contactopariente = contactopariente;
        this.correouniversidad = correouniversidad;
        this.contrasena = contrasena;
        this.contratoalumnos = new ArrayList<Contratoalumno>();
        this.reservas = new ArrayList<Reserva>();
    }

    Alumno(int idconsejerocurricular, String nombre, String apellidos, String telefono, String contactopariente, String correouniversidad, String contrasena) {
       
        this.nombre = nombre;
        this.apellidos = apellidos;
        this.telefono = telefono;
        this.consejerocurricular = new Empleado();
        this.contactopariente = contactopariente;
        this.correouniversidad = correouniversidad;
        this.contrasena = contrasena;
        this.contratoalumnos = new ArrayList<Contratoalumno>();
        this.reservas = new ArrayList<Reserva>();
    }




     public void addContratos(Contratoalumno c){
        this.contratoalumnos.add(c);
    }

      public void addReserva(Reserva a){
        this.reservas.add(a);
    }

      public Contratoalumno obtenerContratoVigente(){
          for (int i=0;i<this.contratoalumnos.size();i++){
              if (this.contratoalumnos.get(i).getEstado().equals("vigente"))
                  return this.contratoalumnos.get(i);
          }
          return null;
      }


     @TableGenerator(
        name="AlumnoGen",
        table="JPA_GENERATOR",
        pkColumnName="GEN_KEY",
        valueColumnName="GEN_VALUE",
        pkColumnValue="ALUMNO_ID",
        allocationSize=1,
        initialValue=300)
        @Id
    @Basic(optional = false)
    @GeneratedValue(strategy=GenerationType.TABLE,generator="AlumnoGen")
    @Column(name = "idalumno", nullable = false)
    public Integer getIdalumno() {
        return idalumno;
    }

    public void setIdalumno(Integer idalumno) {
        this.idalumno = idalumno;
    }

    @Column(name = "nombre")
    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    @Column(name = "apellidos")
    public String getApellidos() {
        return apellidos;
    }

    public void setApellidos(String apellidos) {
        this.apellidos = apellidos;
    }

    @Column(name = "telefono")
    public String getTelefono() {
        return telefono;
    }

    public void setTelefono(String telefono) {
        this.telefono = telefono;
    }

    @JoinColumn(name="idconsejerocurricular",referencedColumnName="idempleado",nullable=true)
    @ManyToOne(cascade=CascadeType.PERSIST)
    public Empleado getConsejerocurricular() {
        return consejerocurricular;
    }

    public void setConsejerocurricular(Empleado consejerocurricular) {
        this.consejerocurricular = consejerocurricular;
    }

    @Column(name = "contactopariente")
    public String getContactopariente() {
        return contactopariente;
    }

    public void setContactopariente(String contactopariente) {
        this.contactopariente = contactopariente;
    }

    @Column(name = "correouniversidad",unique=true)
    public String getCorreouniversidad() {
        return correouniversidad;
    }

    public void setCorreouniversidad(String correouniversidad) {
        this.correouniversidad = correouniversidad;
    }

    @Column(name = "contrasena")
    public String getContrasena() {
        return contrasena;
    }

    public void setContrasena(String contrasena) {
        this.contrasena = contrasena;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idalumno != null ? idalumno.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Alumno)) {
            return false;
        }
        Alumno other = (Alumno) object;
        if ((this.idalumno == null && other.idalumno != null) || (this.idalumno != null && !this.idalumno.equals(other.idalumno))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "business.Alumno[idalumno=" + idalumno + "]";
    }

    @OneToMany(mappedBy = "alumno",cascade=CascadeType.PERSIST)
    public List<Contratoalumno> getContratoalumnos() {
        return contratoalumnos;
    }

    public void setContratoalumnos(List<Contratoalumno> contratoalumnos) {
        this.contratoalumnos = contratoalumnos;
    }


    @OneToMany(mappedBy = "alumno",cascade=CascadeType.PERSIST)
    public List<Reserva> getReservas() {
        return reservas;
    }

    public void setReservas(List<Reserva> reservas) {
        this.reservas = reservas;
    }

   
   
}
